<?php
declare (strict_types = 1);
namespace app\common\model\content;

use think\Exception;
use think\Model;

/**
 * @mixin think\Model
 */
class Content extends Model
{
    protected $autoWriteTimestamp = false;

    // 设置字段信息
    protected $schema = [
        'id'            => 'int',
        'article_id'    => 'int',
        'content'       => 'text',
    ];

    // 设置字段信息
    protected $type = [
        'id'            => 'integer',
        'article_id'    => 'integer',
    ];

    //关联文章
    public function article()
    {
        return $this->belongsTo(Article::class,'article_id', 'id');
    }

    //写入文章内容之前把临时图片保存为永久的，把不用的图片删除掉
    public static function onBeforeWrite(Model $model)
    {
        $article_id = (int) $model->article_id;
        $content = $model->content;

        //获取内容图片列表
        $images = fetchImages($content, '/storage/');
        //如果文中没有图片 直接退出
        if(empty($images)) {

            //删除原有图片 并退出
            if( $model->isExists() ) Image::deleteByArticle($article_id);
            return true;
        }

        //保存并转移图片
        $images_arr = Image::moveImage($images, $article_id);

        if ( !$images_arr ) return true;

        //替换内容中的临时图片
        if(
            isset($images_arr['ori']) &&
            count($images_arr['ori']) > 0 &&
            count($images_arr['ori']) == count($images_arr['des'])
        ){
            $model->content = str_replace($images_arr['ori'], $images_arr['des'], $content);

            //保存图片至数据库
            if (! Image::saveImage($images_arr['des'], $article_id)) throw new Exception('保存图片数据失败.');

        }

        return true;
    }

}
